package 数据结构和算法.剑指offer.链表.反转链表;

import 工具.动态链表生成.DynamicListUtil;
import 工具.单向节点.Node;
import 工具.打印.PrintUtil;

/**
 * 反转链表
 * <p>
 * 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点
 * <p>
 * 双指针进行反转，一个指针代表当前节点，一个用来记录上一个节点，循环进行反转
 */
public class Test {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6};
        Node head = reverseList(DynamicListUtil.createDynamicList(array));
        PrintUtil.println(head.getValue());
    }

    public static Node reverseList(Node head) {
        Node curr = head;
        Node pre = null;
        Node temp = null;

        while (null != curr) {
            temp = curr.getNext();
            curr.setNext(pre);
            pre = curr;
            curr = temp;
        }

        return pre;
    }
}
